package com.rw.tool.util.io.file.json;

import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import com.rw.tool.util.io.file.property.FileBean;
import com.rw.tool.util.io.file.property.FileProperty;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 单个FileDB专用的属性解析器
 *
 * @param <T> 对象类别
 */
public class SingleJsonBeanParser<T> extends JsonBeanParser<T> {

    /**
     * 解析属性
     *
     * @param tClass bean的类对象
     * @return 属性
     */
    @Override
    public FileBean<T> getFileBean(Class<T> tClass) {
        // 获取所有的属性
        List<BeanPropertyDefinition> properties = super.getAllField(tClass);

        // 获取id属性
        List<FileProperty<T>> fileIdList = getFileIdList();

        // 把属性封装为自定义接口
        List<FileProperty<T>> fileProperties = properties.stream()
                .map(property -> toFileProperty(property, false))
                .collect(Collectors.toList());

        return new FileBean<>(fileIdList, fileProperties);
    }

    /**
     * 获取FileID属性
     *
     * @return FileID属性
     */
    private List<FileProperty<T>> getFileIdList() {
        List<FileProperty<T>> list = new ArrayList<>();
        SingleJsonPropertyVisitor<T> propertyVisitor = new SingleJsonPropertyVisitor<>();
        FileProperty<T> single = new FileProperty<>(SingleJsonFileDB.FILE_NAME, false, propertyVisitor);
        list.add(single);
        return list;
    }
}
